/*
 * editorPerfil.h
 *
 *  Created on: 15/01/2011
 *      Author: julian
 */

#ifndef EDITORPERFIL_H_
#define EDITORPERFIL_H_

#include "bezier.h"
#include "mapa.h"
#include <vector>
#include "coord.h"

class editorPerfil {
private:
	Bezier* perfil;
	Mapa* terreno;
	vector<Coord>* coordenadas;
public:
	editorPerfil(Bezier* perfilInicial, Mapa* terreno){
		this->perfil = perfilInicial;
		this->terreno = terreno;
		this->coordenadas = new vector<Coord>();
		this->terreno->establecerPerfil(perfil);
	}

	void agregarCoordenada(Coord coordenada){
		float nuevoX = 3*coordenada.x();
		float nuevoY = 0.0;
		float nuevoZ = 3*coordenada.y();
		Coord nuevaCoord;
		nuevaCoord.set(nuevoX, nuevoY, nuevoZ);
		coordenadas->push_back(nuevaCoord);
	}

	void definirPerfil(){
		if ((coordenadas->size()>3)&&(Bezier::satisfacePrecond(coordenadas->size()))){
			Bezier* nuevoPerfil = new Bezier(*coordenadas);
			delete perfil;
			perfil = nuevoPerfil;
			terreno->establecerPerfil(perfil);
			coordenadas->erase(coordenadas->begin(),coordenadas->end());
		}
	}

	void dibujarPanelPerfil(){
		float paso = 0.05;
		//Dibujado de las curvas
		glBegin(GL_LINE_STRIP);
			glColor3f(1.0,1.0,1.0);
			for(float i=0.0; i<=1; i+=paso){
				Coord v = perfil->operator ()(i);
				float normX = v.x()/3;
				float normY = v.z()/3;
				glVertex2f(normX,normY);
			}
		glEnd();
		//Dibujado de los puntos de control del perfil actual
		glPointSize(5);
		glBegin(GL_POINTS);
			glColor3f(1.0,0.0,0.0);
			vector<Coord> puntos = perfil->getPuntosControl();
			for(unsigned int i = 0; i<puntos.size(); i++){
				Coord coords = puntos[i];
				float coordX = coords.x()/3;
				float coordY = coords.z()/3;
				glVertex2f(coordX,coordY);
			}
		glEnd();
		//Dibujado de los puntos de control de edicion
		glBegin(GL_POINTS);
			glColor3f(0.0,0.0,1.0);
			for(unsigned int i = 0; i<(*coordenadas).size(); i++){
				Coord coords2 = (*coordenadas)[i];
				float coordX = coords2.x()/3;
				float coordY = coords2.z()/3;
				glVertex2f(coordX,coordY);
			}
		glEnd();

	}

	virtual ~editorPerfil(){
		delete perfil;
		delete coordenadas;
	}
};

#endif /* EDITORPERFIL_H_ */
